package main

// 35. 搜索插入位置
func main() {
	nums := []int{1, 2, 3, 4}
	target := 7
	b := searchInsert(nums, target)
	println(b)
}

// 找到节点n,那么就应该有 nums[n-1] < target <= nums[n]
func searchInsert(nums []int, target int) (res int) {
	n := len(nums)
	left := 0
	right := n - 1

	for left < right {
		mid := (right-left)/2 + left
		midNum := nums[mid]
		if target <= midNum {
			right = mid
		} else {
			left = mid + 1
		}
	}

	if nums[right] < target { // 补充边界条件，可能是最大
		return right + 1
	}

	return left
}

// 给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
//
//请必须使用时间复杂度为 O(log n) 的算法。
//
//
//
//示例 1:
//
//输入: nums = [1,3,5,6], target = 5
//输出: 2
//示例 2:
//
//输入: nums = [1,3,5,6], target = 2
//输出: 1
//示例 3:
//
//输入: nums = [1,3,5,6], target = 7
//输出: 4
